import { useMemo } from 'react'
import { useLocation, useNavigate } from 'react-router-dom'

const { VITE_APP_HOMEPAGE: HOMEPAGE = '/' } = import.meta.env

/**
 * 自定义的 useRouter Hook，封装了常用的路由操作方法
 * @returns 包含各种路由操作方法的对象
 */
export function useRouter() {
  const navigate = useNavigate()
  const location = useLocation()

  // 使用 useMemo 优化性能，确保只在 navigate 依赖变化时重新创建 router 对象
  return useMemo(
    () => ({
      /** 当前路径 */
      pathname: location.pathname,
      /** 返回上一页，相当于浏览器后退按钮功能 */
      back: () => navigate(-1),
      /** 前进到下一页，相当于浏览器前进按钮功能 */
      forward: () => navigate(1),
      /** 刷新当前页面，直接调用原生的 location.reload() */
      reload: () => window.location.reload(),
      /**
       * 跳转到指定路径（保留浏览历史）
       * @param {string} href 要跳转的路径
       */
      push: (href: string) => navigate(href),
      /**
       * 替换当前路由（不保留浏览历史）
       * @param {string} href 要替换成的路径
       */
      replace: (href: string) => navigate(href, { replace: true }),
      /**
       * 前往菜单，由该方法决定是否替换当前路由
       * - 当路径为空时，跳转到首页
       * @param href 要跳转的路径
       */
      to: (href?: string) => navigate(href ?? HOMEPAGE, { replace: true }),
      /** 前往首页 */
      toHomePage: () => navigate(HOMEPAGE, { replace: true }),
      /** 前往登录页 */
      toLoginPage: () => navigate('/login', { replace: true }),
    }),
    [location.pathname, navigate]
  )
}
